package com.wongoing.sys.action;

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import com.wongoing.annotation.Description;
import com.wongoing.base.PageResult;
import com.wongoing.sys.action.BaseAction;
import com.wongoing.sys.model.SysBasSlider;
import com.wongoing.sys.model.SysCode;
import com.wongoing.sys.service.SysBasSliderService;
import com.wongoing.sys.service.SysCodeService;
import com.wongoing.sys.shiro.ShiroUser;

import com.wongoing.sys.viewmodel.JsonResult;
import com.wongoing.util.Constants;
import com.wongoing.util.FileUtil;
import com.wongoing.util.ImageUtil;
import com.wongoing.util.LogService;
import com.wongoing.util.ModelAndViewConstants;
import com.wongoing.util.PageUtil;
import com.wongoing.util.ResourceUtil;
import com.wongoing.util.Status;

@Controller
@RequestMapping("/sys/sysSliderAction")
public class SysBasSliderAction extends BaseAction{
	private SysBasSliderService service;
	private SysCodeService codeService;
	@Autowired
	public void setCodeService(SysCodeService codeService) {
		this.codeService = codeService;
	}

	@Autowired
	public void setService(SysBasSliderService service) {
		this.service = service;
	}
	
	/**
	 * 功能说明：进入列表显示界面
	 * 修改说明：
	 * @author zhaoxihao
	 * @date 2017年10月15日 下午12:26:19
	 * @param pageSize 每页记录数
	 * @param pageCurrent 当前页索引
	 * @param orderField 排序字段
	 * @param orderDirection 排序方向
	 * @param paramCompanyName 参数字段：幻灯名称
	 * @param paramRemark 参数字段：备注
	 * @return
	 */
	@RequestMapping(value="/toList")
	public ModelAndView toList(Integer pageSize, Integer pageCurrent, String orderField, String orderDirection,
			String paramSliderTitle, String paramRemark) {
		ModelAndView mv = null;
		try {
			
			PageResult<SysBasSlider> pageResult = PageUtil.pageSet(this.getClass(), pageSize, pageCurrent, orderField, orderDirection);
			pageResult.getParam().put("status", "0");
			//模糊查询判断
			List<Boolean> multiFuzzyQuery = new ArrayList<Boolean>();
			if (paramSliderTitle != null && !"".equals(paramSliderTitle)) {
				pageResult.getParam().put("sliderTitle", paramSliderTitle);
				pageResult.getExt().put("paramSliderTitle", paramSliderTitle);
				multiFuzzyQuery.add(true);
			}else{
				multiFuzzyQuery.add(false);
			}
			if (paramRemark != null && !"".equals(paramRemark)) {
				pageResult.getParam().put("remark", paramRemark);
				pageResult.getExt().put("paramRemark", paramRemark);
				multiFuzzyQuery.add(true);
			}else{
				multiFuzzyQuery.add(false);
			}
			pageResult.setOrderField("pbs.RecordTime");
			pageResult.setOrderDirection("DESC");
			pageResult = this.service.getSliderListPageResult(pageResult);
			mv = new ModelAndView();
			mv.addObject(ModelAndViewConstants.PAGE_RESULT, pageResult);
			mv.setViewName(ModelAndViewConstants.SLIDER_MAIN_VIEW);
			LogService.getInstance(this).debug("获取幻灯分页数据成功："+ModelAndViewConstants.SLIDER_MAIN_VIEW);
		}
		catch(Exception ex) {
			LogService.getInstance(this).error("获取幻灯分页数据失败：" + ex.getMessage(), ex);
			mv = new ModelAndView(ModelAndViewConstants.ERROR_VIEW);
		}
		return mv;
	}
	/**
	 * 功能说明：执行幻灯名称验证
	 * 修改说明：
	 * @author zhaoxihao
	 * @date 2017年10月15日 下午12:27:58
	 * @param op 操作
	 * @param companyName 名称新值
	 * @param original 原值
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value="/doSliderTitleValidate")
	public Map<String,Object> doSliderNameValidate(String op, String sliderTitle, String original){
		Map<String,Object> jsonResult = null;
		try {
			String where = " BINARY SliderTitle='"+sliderTitle+"' and Status='0' ";
			List<SysBasSlider> list = this.service.getByWhere(where);
			if(list!=null){
				int count = list.size();
				switch (count) {
				case 0:
					jsonResult = JsonResult.jsonValidateReturn(true, "验证通过，该幻灯名称可以使用");
					LogService.getInstance(this).debug("幻灯名称验证通过，可使用");
					break;
				case 1:
					if(ModelAndViewConstants.OPERATION_VALUE_EDIT.equals(op)){
						if(sliderTitle.equals(original)){
							jsonResult = JsonResult.jsonValidateReturn(true, "验证通过，该幻灯名称可以使用");
							LogService.getInstance(this).debug("幻灯名称验证通过，可使用");
						}else{
							jsonResult = JsonResult.jsonValidateReturn(false, "该幻灯名称已被使用");
							LogService.getInstance(this).debug("幻灯名称已被使用，不可使用");
						}
					}else{
						jsonResult = JsonResult.jsonValidateReturn(false, "该幻灯名称已被使用");
						LogService.getInstance(this).debug("幻灯名称已被使用，不可使用");
					}
					break;
				default:
					jsonResult = JsonResult.jsonValidateReturn(false, "该幻灯名称已被使用");
					LogService.getInstance(this).debug("幻灯名称已被使用，不可使用");
					break;
				}
			}else{
				jsonResult = JsonResult.jsonValidateReturn(false, "验证失败");
				LogService.getInstance(this).error("幻灯名称验证失败");
			}
		} catch (Exception e) {
			jsonResult = JsonResult.jsonValidateReturn(false, "验证失败");
			LogService.getInstance(this).error("幻灯名称验证失败");
		}
		return jsonResult;
	}
	/**
	 * 功能说明：进入添加界面操作
	 * 修改说明：
	 * @author zhaoxihao
	 * @date 2017年10月15日 下午12:28:59
	 * @return
	 */
	@RequestMapping(value="/toAdd")
	public ModelAndView toAdd(){
		ModelAndView mv = null;
		try {
			Map<String,Object> param = new HashMap<String, Object>();
			param.put("status", "0");
			
			List<SysCode> code=this.codeService.getByParam(param);
			 for (int i = 0; i < code.size(); i++) {  
		        	if (!code.get(i).getCodeType().equals("sliderType")) {   
		        		code.remove(i);  	  
		        	i--;   	  
		        	}
		        }
			mv = new ModelAndView();
			mv.addObject(ModelAndViewConstants.OPERATION_KEY,ModelAndViewConstants.OPERATION_VALUE_ADD);
			mv.addObject(ModelAndViewConstants.TITLE_KEY, "添加幻灯信息");
		
			mv.addObject(ModelAndViewConstants.CODE_MODEL, code);
			mv.setViewName(ModelAndViewConstants.SLIDER_EDIT_VIEW);
			LogService.getInstance(this).error("进入幻灯添加功能成功：" +ModelAndViewConstants.SLIDER_EDIT_VIEW);
		}
		catch(Exception ex) {
			LogService.getInstance(this).error("进入幻灯添加失败：" + ex.getMessage(), ex);
			mv = new ModelAndView("redirect:/error.jsp");
		}
		return mv;
	}
	/**
	 * 功能说明：进入编辑界面
	 * 修改说明：
	 * @author zhaoxihao
	 * @date 2017年10月15日 下午12:29:20
	 * @param id 用户id，主键值
	 * @return
	 */
	@RequestMapping(value="/toEdit")
	public ModelAndView toEdit(Integer id) {
		ModelAndView mv = null;
		try {
			SysBasSlider slider = this.service.getByPrimaryKey(id);
			Map<String,Object> param = new HashMap<String, Object>();
			param.put("status", "0");
			List<SysCode> code=this.codeService.getByParam(param);
			 for (int i = 0; i < code.size(); i++) {  
		        	if (!code.get(i).getCodeType().equals("sliderType")) {   
		        		code.remove(i);  	  
		        	i--;   	  
		        	}
		        }
			mv = new ModelAndView();
			mv.addObject(ModelAndViewConstants.OPERATION_KEY,ModelAndViewConstants.OPERATION_VALUE_EDIT);
			mv.addObject(ModelAndViewConstants.TITLE_KEY, "修改幻灯信息");
			mv.addObject(ModelAndViewConstants.SLIDER_MODEL, slider);
			mv.addObject(ModelAndViewConstants.CODE_MODEL, code);
			mv.setViewName(ModelAndViewConstants.SLIDER_EDIT_VIEW);
		}
		catch(Exception ex) {
			LogService.getInstance(this).error("进入幻灯编辑失败：" + ex.getMessage(), ex);
			mv = new ModelAndView(ModelAndViewConstants.ERROR_VIEW);
		}
		return mv;
	}
	/**
	 * 功能说明：执行保存操作
	 * 修改说明：
	 * @author zhaoxihao
	 * @date 2017年10月15日 下午12:29:51
	 * @param entity 幻灯信息实体
	 * @param op op=add为添加操作，op=edit为编辑操作
	 * @return 返回json对象
	 */
	/*@ResponseBody
	@RequestMapping(value="/doSave")
	public Map<String, Object> doSave(SysBasSlider entity, String op) {
		Map<String, Object> jsonResult = null;
		try {
			String tabid = tabid(ModelAndViewConstants.SLIDER_SYS_ID);
			Date now = new Date();				
			Subject subject = SecurityUtils.getSubject();
			String slidername = subject.getPrincipal().toString();
			Map<String, Object> param = new HashMap<String, Object>();
			param.put("slidername", slidername);
			if (null == op || ModelAndViewConstants.OPERATION_VALUE_ADD.equals(op)) {
				entity.setStatus("0");
				int count = this.service.insert(entity);
				if (count > 0) {
					LogService.getInstance(this).debug("添加幻灯信息成功!");
				}
			}
			else {
				int count = this.service.updateByPrimaryKey(entity);
				if (count > 0) {
					LogService.getInstance(this).debug("编辑幻灯信息成功!");
				}
			}
			Integer statusCode = 200;
			String msg = "幻灯信息保存成功";
			jsonResult = JsonResult.jsonReturn(statusCode, msg, tabid);
		}
		catch(Exception ex) {
			LogService.getInstance(this).error("保存幻灯信息失败：" + ex.getMessage(), ex);
			String msg =  "保存幻灯信息失败：" + ex.getMessage();
			jsonResult = JsonResult.jsonReturnErr(msg);
		}
		return jsonResult;
	}*/
	
/**
	 * 功能说明：执行删除操作
	 * 修改说明：
	 * @author zhaoxihao
	 * @date 2017年10月15日 下午12:29:51
	 * @param id 用户id，主键值
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value="/doDel")
	public Map<String, Object> doDel(Integer id) {
		Map<String, Object> result = null;
		try {
			SysBasSlider entity = new SysBasSlider();
			entity.setId(id);
			entity.setStatus("1");
			int count = this.service.updateByPrimaryKey(entity);
			if (count > 0) {
				LogService.getInstance(this).debug("删除幻灯信息成功!");
			}
			Integer statusCode = 200;
			String msg = "删除成功!";
			String tabid = tabid(ModelAndViewConstants.SLIDER_SYS_ID);
			result = JsonResult.jsonReturn(Status.OK.getCode(), msg, tabid,false,"","");
		}
		catch(Exception ex) {
			LogService.getInstance(this).error("删除幻灯信息[" + id + "]失败：" + ex.getMessage(), ex);
			String msg =  "删除幻灯信息[" + id + "]失败：" + ex.getMessage();
			result = JsonResult.jsonReturnErr(msg);
		}
		return result;
	}
//	/**
//	 * 功能说明：执行删除操作
//	 * 修改说明：
//	 * @author zhaoxihao
//	 * @date 2017年10月15日 下午12:29:51
//	 * @param id 用户id，主键值
//	 * @return
//	 */
//	@ResponseBody
//	@RequestMapping(value="/doDel")
//	public Map<String, Object> doDel(String  ids) {
//		Map<String, Object> result = null;
//
//		System.out.println("ids的值"+ids);
//	      String checkedIds[]=ids.split(",");//进行分割存到数组
//	      String temp="";
//	       SysBasSlider slider;
//		List<SysBasSlider> sliderList=new ArrayList<SysBasSlider>();
//		
//		try {
//			   int count=0;
//	        for(int i =0;i<checkedIds.length;i++){
//	            if(!checkedIds[i].equals("")){
//	                System.out.println(checkedIds[i]);
//	                temp=checkedIds[i];
//	                slider=service.getByPrimaryKey(temp);    //根据ID获取数据表中这条ID的整条记录
//	                slider.setStatus("1");    //更改这个ID的status字段的值
//	            	int x=service.updateByPrimaryKey(slider);    //保存更改
//	            count=count+x;
//	            }
//	            
//	        }
//			
//			if (count ==checkedIds.length) {
//				LogService.getInstance(this).debug("删除幻灯信息成功!");
//			}
//			Integer statusCode = 200;
//			String msg = "删除成功!";
//			String tabid = tabid(ModelAndViewConstants.SLIDER_SYS_ID);
//			result = JsonResult.jsonReturn(Status.OK.getCode(), msg, tabid,false,"","");
//		}
//		catch(Exception ex) {
//			LogService.getInstance(this).error("删除幻灯信息失败：" + ex.getMessage(), ex);
//			String msg =  "删除幻灯信息失败：" + ex.getMessage();
//			result = JsonResult.jsonReturnErr(msg);
//		}
//		return result;
//	}
	/**
	 * 
	 * 功能说明： 修改说明：幻灯信息保存
	 * 
	 * @author zhaoxihao
	 * @date 2017-10-18 上午9:53:47
	 * @param dsType
	 *            数据源类型
	 * @param siteId
	 *            幻灯Id
	 * @param siteName
	 *            幻灯名称
	 * @param file
	 *            上传文件
	 * @return
	 */
	@Description("幻灯信息保存")
	@ResponseBody
	@RequestMapping(value = "/doSave", method = RequestMethod.POST, consumes = "multipart/form-data")
	public Map<String, Object> doSave(@RequestParam(value = "dsType", defaultValue = "sysDs") String dsType,
			@RequestParam(value = "file", required = false) MultipartFile file,
			SysBasSlider entity,  String op) {

		String[] typeIdName=entity.getSliderTypeName().split("_");
		String typeId=typeIdName[0];
		String typeName=typeIdName[1];
		entity.setSliderTypeId(Integer.parseInt(typeId));
		entity.setSliderTypeName(typeName);
		Map<String, Object> jsonResult = null;
		String msg = "";
		boolean flag = false;
		try {
			if (file.getSize() != 0) {
				Map<String, Object> result =  ImageUtil.getInstance().uploadImg(entity.getImageUrl(),Constants.UPLOAD_IMG_SLIDER, file);
				if (result.get("statusCode") =="300") {
					return result;
				}
				entity.setImageUrl((String)result.get("message"));
			}
		
			// 存储幻灯信息
		
				String tabid = tabid(ModelAndViewConstants.SLIDER_SYS_ID);
				Date now = new Date();
				ShiroUser currentUser = (ShiroUser)SecurityUtils.getSubject().getPrincipal();
				entity.setModifyUserId(currentUser.getUserId());
				entity.setModifyUserName(currentUser.getAccount());
			
				Subject subject = SecurityUtils.getSubject();
				String sliserName = subject.getPrincipal().toString();
				Map<String, Object> param = new HashMap<String, Object>();
				param.put("sliderName", sliserName);
				if (null == op || ModelAndViewConstants.OPERATION_VALUE_ADD.equals(op)) {
					entity.setStatus("0");
					int count = this.service.insert(entity);
					if (count > 0) {
						LogService.getInstance(this).debug("添加幻灯信息成功!");
					}
				} else {
					int count = this.service.updateByPrimaryKey(entity);
					if (count > 0) {
						LogService.getInstance(this).debug("编辑幻灯信息成功!");
					}
				}
				Integer statusCode = 200;
				String sliderMsg = "幻灯信息保存成功";
				jsonResult = JsonResult.jsonReturn(statusCode, sliderMsg, tabid);
				return jsonResult;
			
		} catch (Exception e) {
			msg = "接口调用异常";
			jsonResult = JsonResult.jsonWsReturn(1, msg, e.getMessage());
			LogService.getInstance(this).error("保存幻灯信息失败" + e.getMessage());
			String mg =  "保存幻灯信息失败：" + e.getMessage();
			jsonResult = JsonResult.jsonReturnErr(mg);
			return jsonResult;
		}

	}
}
